// 迭代器 (Iterator)
// ES中能够表示有结构的数组类型越来越多，现在新增了Set、Map，为了给各种各样的数据结构提供统一遍历方式，ES2015提供了Iterable接口，理解为规格标准，实现了统一接口
//实现Iterable接口就能够被for...of遍历

// [],Set,Map 三个可以被for...of遍历的对象当中都有这么Symbol(Symbol.iterator)方法，可被循环遍历的对象中必须挂载iterator方法

//在这个迭代器当中内部应该是维护了一个数据指针，每调用一次next，指针都会往后移一位，done属性的作用是表示内部所有的属性遍历完了

// 必须实现iterator的接口，内部必须挂载一个iterator方法，这个方法里面要返回带有next（）方法的对象，不断调用这个方法就能实现内部所有的数据的遍历

const Set = new Set(['foo','bar','baz'])

const iterator = Set[Symbol.iterator]()

console.log(iterator.next()) // {value:'foo',done:false}
console.log(iterator.next()) // {value:'bar',done:false}
console.log(iterator.next()) //{value:'baz',done:false}
console.log(iterator.next())//{value:undefined,done:true}
console.log(iterator.next())//{value:undefined,done:true}

